package util

import "golang.org/x/crypto/bcrypt"

// PasswordEncrypt 加密密码
// 返回哈希字符串，用于存储
func PasswordEncrypt(plaintext string) (string, error) {
	// 将密码转换为字节切片，设置加密成本（cost）为10（推荐值，范围4-31）
	hashBytes, err := bcrypt.GenerateFromPassword(
		[]byte(plaintext),  // 原始密码（字节切片）
		bcrypt.DefaultCost, // 默认加密成本（10），可自定义如12
	)
	if err != nil {
		return "", err // 处理加密错误（如成本值无效）
	}
	// 将哈希字节转换为字符串返回（存储到数据库）
	return string(hashBytes), nil
}

// PasswordVerify 验证密码
// 比较明文密码与存储的哈希值是否匹配
func PasswordVerify(ciphertext string, plaintext string) bool {
	// 比较哈希值与明文密码
	err := bcrypt.CompareHashAndPassword(
		[]byte(ciphertext), // 存储的哈希值（字节切片）
		[]byte(plaintext),  // 用户输入的明文密码（字节切片）
	)
	// 无错误则验证通过
	return err == nil
}
